package SBD.CRUD;

import SBD.Servicios.Conexion;
import SBD.Servicios.FactoriaServicios;
import com.csvreader.CsvWriter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
* @class ClasificadorBD
* @author Mauricio Alvarez.
* @brief Guarda el log de mediciones realzados por el filtro.
*/
public class ClasificadorBD
{

    //////////////////////
    // OPERACIONES
    //////////////////////

    /**
     * @brief Guarda los párametros de las mediciones en un archivo de texto.
     * @param TopicoConsultado, config_terminos, config_contenido, MetricasSeleccionadas, factorK1, factorb, Umbral, Ranking y CantidadMuestra.
     * @return void
    */
    public void GuardarLogPrueba(String TopicoConsultado, 
                                 int config_terminos,
                                 int config_contenido,
                                 List<Integer> MetricasSeleccionadas,
                                 double factorK1, double factorb,
                                 double Umbral,
                                 int Ranking,
                                 int CantidadMuestra)
    {

        try{
            
            //PASO 1: TOPICO
            //      + NOMBRE TOPICO
            //      + Termino (1) / Topico (2)
            //PASO 2: METRICAS
            //      + Jaccard/Coseno/Euclidiana
            //      + OkapiBM25:
            //          - k1
            //          - b
            //PASO 3: CONFIGURACION CLASIFICADOR
            //      + Umbral
            //      + Ranking
            //      + Contenido: BODY (1), ST (2), BODY+ST (3)
            //PASO 4: CONFIGURAR MUESTRA
            //      + Cantidad o Todas            
            
            //Fecha actual:
            java.util.Date fecha = new Date();
            PrintWriter fileout = new PrintWriter(new FileWriter("LOG_PRUEBAS.txt", true));

            fileout.println("**************************************************************");
            fileout.println("REGISTRO DE PRUEBAS FECHA: "+ fecha +"                ");
            fileout.println("**************************************************************");
            fileout.println();
            fileout.println("///////////////");
            fileout.println("PASO 1: TOPICO ");
            fileout.println("///////////////");
            fileout.println("1. Nombre del topico: " + TopicoConsultado);
            if (config_terminos == 1)
            {
                fileout.println("2. Configuración terminos: Concepto único");
            }
            if (config_terminos == 2)
            {
                fileout.println("2. Configuración terminos: Tópico");
            }
            fileout.println();
            fileout.println("///////////////////");
            fileout.println("PASO 2: METRICAS ");
            fileout.println("///////////////////");
            fileout.println("3. Metricas Seleccionadas: ");
            if (MetricasSeleccionadas.get(0) == 1)
            {
                fileout.println(" -> JACCARD");
            }
            if (MetricasSeleccionadas.get(1) == 1)
            {
                fileout.println(" -> SIMILITUD COSENO");
            }
            if (MetricasSeleccionadas.get(2) == 1)
            {
                fileout.println(" -> SIMILITUD EUCLIDIANA");
            }
            fileout.println("4. Factor k1: "+ factorK1);
            fileout.println("5. Factor b: "+ factorb);
            fileout.println("/////////////////////////////////////");
            fileout.println("PASO 3: CONFIGURACION CLASIFICADOR ");
            fileout.println("/////////////////////////////////////");
            fileout.println("6. Umbral: "+ Umbral);
            fileout.println("7. Ranking: "+ Ranking);
            fileout.println("8. Contenido: "+ Ranking);
            if (config_contenido == 1)
            {
                fileout.println("9. Contenido: BODY");
            }
            if (config_contenido == 2)
            {
                fileout.println("9. Contenido: SURROUND TEXT");
            }
            if (config_contenido == 3)
            {
                fileout.println("9. Contenido: BODY + SURROUND TEXT");
            }
            fileout.println("///////////////////////////");
            fileout.println("PASO 4: CONFIGURAR MUESTRA ");
            fileout.println("///////////////////////////");
            if (CantidadMuestra == -1)
            {
                fileout.println("10. Cantidad muestra: TODOS LOS SITIOS");
            }
            if (CantidadMuestra > -1)
            {
                fileout.println("10. Cantidad muestra: "+ CantidadMuestra);
            }


           //Se cierra el archivo:
           fileout.close();

        } catch (Exception e) {
            System.out.println("ERROR: No se ha podido crear archivo de LOG.");
        }


    }//FIN GuardarLogPrueba

    public void GenerarDataset() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException, SQLException 
    {
        int id_relacion_pag;
        double max_jaccard_p_TODO = 0;
        double max_sctfidfn_p_TODO = 0;
        double max_sctfidfs_p_TODO = 0;
        double max_jaccard_p_MTURK = 0;
        double max_sctfidfn_p_MTURK = 0;
        double max_sctfidfs_p_MTURK = 0;
        double max_jaccard_r_TODO = 0;
        double max_sctfidfn_r_TODO = 0;
        double max_sctfidfs_r_TODO = 0;
        double max_jaccard_r_MTURK = 0;
        double max_sctfidfn_r_MTURK = 0;
        double max_sctfidfs_r_MTURK = 0;        
        
        //Atributos de la consultas:
        int ID_RELACION_PAG;
        int ID_PAGINA_FUENTE;
        int ID_PAGINA_DESTINO;
        String URL_FUENTE;
        String URL_DESTINO;
        String ANCHOR_TEXT;          
        String TEXTO_ALREDEDOR;
        String HEADER;
        String TITLE;
        double PJE_PREDICTOR_JACCARD;
        double PJE_REAL_JACCARD;
        double PJE_PREDICTOR_SCTF_IDF_N;         
        double PJE_REAL_SCTF_IDF_N;
        double PJE_PREDICTOR_SCTF_IDF_S;
        double PJE_REAL_SCTF_IDF_S;
        
        /*
        String pathArchivo1 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetMturk_SA.csv";
        String pathArchivo2 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetTodo_SA.csv";
        String pathArchivo3 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetMturk_A.csv";
        String pathArchivo4 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetTodo_A.csv";
        CsvWriter writercsv1 = new CsvWriter(pathArchivo1);
        CsvWriter writercsv2 = new CsvWriter(pathArchivo2);
        CsvWriter writercsv3 = new CsvWriter(pathArchivo3);
        CsvWriter writercsv4 = new CsvWriter(pathArchivo4);
         */
        
        
        try {

            ///////////////////////////////////////////////
            //Archivo MTURK SIN AGRUPAR:
            // Se crea el libro
            ///////////////////////////////////////////////
            HSSFWorkbook DatasetMTURK_SA = new HSSFWorkbook();

            // Se crea una hoja dentro del libro           
            HSSFSheet Jaccard_hojaMTURK_SA = DatasetMTURK_SA.createSheet("Jaccard");
            HSSFSheet SCTFIDFN_hojaMTURK_SA = DatasetMTURK_SA.createSheet("SCTFIDFN");
            HSSFSheet SCTFIDFS_hojaMTURK_SA = DatasetMTURK_SA.createSheet("SCTFIDFS"); 
            
            // Se crea una fila dentro de la hoja (Encabezado Jaccard)
            HSSFRow fila;
            fila = Jaccard_hojaMTURK_SA.createRow(0);
            
            // Se crea una celda dentro de la fila
            HSSFCell celda;
            HSSFRichTextString texto;
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  
            
            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFN_hojaMTURK_SA.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_N");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);
            
            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFS_hojaMTURK_SA.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);              
            
            /*
            writercsv1.write("ID_RELACION_PAG");
            writercsv1.write("ID_PAGINA_FUENTE");
            writercsv1.write("ID_PAGINA_DESTINO");
            writercsv1.write("URL_FUENTE");
            writercsv1.write("URL_DESTINO");
            writercsv1.write("ANCHOR_TEXT");           
            writercsv1.write("TEXTO_ALREDEDOR");
            writercsv1.write("HEADER");
            writercsv1.write("TITLE");
            writercsv1.write("PJE_PREDICTOR_JACCARD");
            writercsv1.write("PJE_REAL_JACCARD");
            writercsv1.write("PJE_PREDICTOR_SCTF_IDF_N");           
            writercsv1.write("PJE_REAL_SCTF_IDF_N");
            writercsv1.write("PJE_PREDICTOR_SCTF_IDF_S");
            writercsv1.write("PJE_REAL_SCTF_IDF_S");
            writercsv1.endRecord();
            */
            
            ////////////////////////////////////////////////////
            //Se escriben las cabeceras de los dos archivos.
            //Archivo TODO SIN AGRUPAR:
            ////////////////////////////////////////////////////
            HSSFWorkbook DatasetTODO_SA = new HSSFWorkbook();

            // Se crea una hoja dentro del libro          
            HSSFSheet Jaccard_hojaTODO_SA = DatasetTODO_SA.createSheet("Jaccard");
            HSSFSheet SCTFIDFN_hojaTODO_SA = DatasetTODO_SA.createSheet("SCTFIDFN");
            HSSFSheet SCTFIDFS_hojaTODO_SA = DatasetTODO_SA.createSheet("SCTFIDFS"); 
            
            // Se crea una fila dentro de la hoja (Encabezado Jaccard)
            fila = Jaccard_hojaTODO_SA.createRow(0);
                    
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  
            
            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFN_hojaTODO_SA.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_N");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  

            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFS_hoja)
            fila = SCTFIDFS_hojaTODO_SA.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);              

            /*
            writercsv2.write("ID_RELACION_PAG");
            writercsv2.write("ID_PAGINA_FUENTE");
            writercsv2.write("ID_PAGINA_DESTINO");
            writercsv2.write("URL_FUENTE");
            writercsv2.write("URL_DESTINO");
            writercsv2.write("ANCHOR_TEXT");           
            writercsv2.write("TEXTO_ALREDEDOR");
            writercsv2.write("HEADER");
            writercsv2.write("TITLE");
            writercsv2.write("PJE_PREDICTOR_JACCARD");
            writercsv2.write("PJE_REAL_JACCARD");
            writercsv2.write("PJE_PREDICTOR_SCTF_IDF_N");           
            writercsv2.write("PJE_REAL_SCTF_IDF_N");
            writercsv2.write("PJE_PREDICTOR_SCTF_IDF_S");
            writercsv2.write("PJE_REAL_SCTF_IDF_S");
            writercsv2.endRecord();
            */
            
            
            ////////////////////////////////////////////////////
            //Se escriben las cabeceras de los dos archivos.
            //Archivo MTURK AGRUPADO:
            ////////////////////////////////////////////////////
            HSSFWorkbook DatasetMTURK_A = new HSSFWorkbook();

            // Se crea una hoja dentro del libro          
            HSSFSheet Jaccard_hojaMTURK_A = DatasetMTURK_A.createSheet("Jaccard");
            HSSFSheet SCTFIDFN_hojaMTURK_A = DatasetMTURK_A.createSheet("SCTFIDFN");
            HSSFSheet SCTFIDFS_hojaMTURK_A = DatasetMTURK_A.createSheet("SCTFIDFS"); 
            
            // Se crea una fila dentro de la hoja (Encabezado Jaccard)
            fila = Jaccard_hojaMTURK_A.createRow(0);
                    
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  
            
            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFN_hojaMTURK_A.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_N");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  

            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFS_hojaMTURK_A.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);              

            /*
            writercsv3.write("ID_RELACION_PAG");
            writercsv3.write("ID_PAGINA_FUENTE");
            writercsv3.write("ID_PAGINA_DESTINO");
            writercsv3.write("URL_FUENTE");
            writercsv3.write("URL_DESTINO");
            writercsv3.write("ANCHOR_TEXT");           
            writercsv3.write("TEXTO_ALREDEDOR");
            writercsv3.write("HEADER");
            writercsv3.write("TITLE");
            writercsv3.write("PJE_PREDICTOR_JACCARD");
            writercsv3.write("PJE_REAL_JACCARD");
            writercsv3.write("PJE_PREDICTOR_SCTF_IDF_N");           
            writercsv3.write("PJE_REAL_SCTF_IDF_N");
            writercsv3.write("PJE_PREDICTOR_SCTF_IDF_S");
            writercsv3.write("PJE_REAL_SCTF_IDF_S");
            writercsv3.endRecord();
            */
            
            ////////////////////////////////////////////////////
            //Se escriben las cabeceras de los dos archivos.
            //Archivo TODO SIN AGRUPAR:
            ////////////////////////////////////////////////////
            HSSFWorkbook DatasetTODO_A = new HSSFWorkbook();

            // Se crea una hoja dentro del libro          
            HSSFSheet Jaccard_hojaTODO_A = DatasetTODO_A.createSheet("Jaccard");
            HSSFSheet SCTFIDFN_hojaTODO_A = DatasetTODO_A.createSheet("SCTFIDFN");
            HSSFSheet SCTFIDFS_hojaTODO_A = DatasetTODO_A.createSheet("SCTFIDFS"); 
            
            // Se crea una fila dentro de la hoja (Encabezado Jaccard)
            fila = Jaccard_hojaTODO_A.createRow(0);
                    
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_JACCARD");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  
            
            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFN_hojaTODO_A.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_N");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);  

            
            // Se crea una fila dentro de la hoja (Encabezado SCTFIDFN_hoja)
            fila = SCTFIDFS_hojaTODO_A.createRow(0);
            
            // Se crea el contenido de la celda y se mete en ella.
            celda = fila.createCell(0);
            texto = new HSSFRichTextString("ID_RELACION_PAG");
            celda.setCellValue(texto);
            celda = fila.createCell(1);
            texto = new HSSFRichTextString("ID_PAGINA_FUENTE");
            celda.setCellValue(texto);       
            celda = fila.createCell(2);
            texto = new HSSFRichTextString("ID_PAGINA_DESTINO");
            celda.setCellValue(texto);       
            celda = fila.createCell(3);
            texto = new HSSFRichTextString("URL_FUENTE");
            celda.setCellValue(texto);  
            celda = fila.createCell(4);
            texto = new HSSFRichTextString("URL_DESTINO");
            celda.setCellValue(texto);  
            celda = fila.createCell(5);
            texto = new HSSFRichTextString("PJE_PREDICTOR_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(6);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_S");
            celda.setCellValue(texto);  
            celda = fila.createCell(7);
            texto = new HSSFRichTextString("PJE_REAL_SCTF_IDF_N");
            celda.setCellValue(texto);              
            
            /*
            writercsv4.write("ID_RELACION_PAG");
            writercsv4.write("ID_PAGINA_FUENTE");
            writercsv4.write("ID_PAGINA_DESTINO");
            writercsv4.write("URL_FUENTE");
            writercsv4.write("URL_DESTINO");
            writercsv4.write("ANCHOR_TEXT");           
            writercsv4.write("TEXTO_ALREDEDOR");
            writercsv4.write("HEADER");
            writercsv4.write("TITLE");
            writercsv4.write("PJE_PREDICTOR_JACCARD");
            writercsv4.write("PJE_REAL_JACCARD");
            writercsv4.write("PJE_PREDICTOR_SCTF_IDF_N");           
            writercsv4.write("PJE_REAL_SCTF_IDF_N");
            writercsv4.write("PJE_PREDICTOR_SCTF_IDF_S");
            writercsv4.write("PJE_REAL_SCTF_IDF_S");
            writercsv4.endRecord();      
            */
            
            
            Conexion cdb = FactoriaServicios.getInstancia().getConexionBD();
            
            
            /////////////////////////////////////////////////////////
            //Se obtiene el máximo del jaccard predictor (TODO):
            ////////////////////////////////////////////////////////
            cdb.un_sql = "SELECT max(PJE_PREDICTOR_JACCARD) AS \"max_jaccard_p\" FROM RELACION_PAGINAS;";
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                if (cdb.resultado.next())
                {
                    max_jaccard_p_TODO = cdb.resultado.getDouble("max_jaccard_p");
                }        
            }

            //Se obtiene el máximo del sctf-idf-n predictor:
            cdb.un_sql = "SELECT max(PJE_PREDICTOR_SCTF_IDF_N) AS \"max_sctfidfn_p\" FROM RELACION_PAGINAS;";
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                if (cdb.resultado.next())
                {
                    max_sctfidfn_p_TODO = cdb.resultado.getDouble("max_sctfidfn_p");
                }        
            }

            //Se obtiene el máximo del sctf-idf-n predictor:
            cdb.un_sql = "SELECT max(PJE_PREDICTOR_SCTF_IDF_S) AS \"max_sctfidfs_p\" FROM RELACION_PAGINAS;";
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                if (cdb.resultado.next())
                {
                    max_sctfidfs_p_TODO = cdb.resultado.getDouble("max_sctfidfs_p");
                }        
            }

            
            /////////////////////////////////////////////////////////
            //Se obtiene el máximo del jaccard predictor (MTURK):
            ////////////////////////////////////////////////////////

            FileInputStream fis = new FileInputStream("C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\SQL\\MaxJaccardMTURK.txt");
            InputStreamReader is = new InputStreamReader(fis, "ISO-8859-1");
            BufferedReader bf = new BufferedReader(is);
            String linea;
            String query = " ";

            while ((linea = bf.readLine()) != null) {
                  query = query + " " + linea;
            }
            
            fis.close();  
            
            cdb.un_sql = query;
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                if (cdb.resultado.next())
                {
                    max_jaccard_p_MTURK = cdb.resultado.getDouble("max");
                }        
            }

            
            fis = new FileInputStream("C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\SQL\\MaxSCTFIDFN_MTURK.txt");
            is = new InputStreamReader(fis, "ISO-8859-1");
            bf = new BufferedReader(is);
            query = " ";

            while ((linea = bf.readLine()) != null) {
                  query = query + " " + linea;
            }
            
            fis.close();  
            
            
            //Se obtiene el máximo del sctf-idf-n predictor:
            cdb.un_sql = query;
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                if (cdb.resultado.next())
                {
                    max_sctfidfn_p_MTURK = cdb.resultado.getDouble("max");
                }        
            }

            
            fis = new FileInputStream("C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\SQL\\MaxSCTFIDFS_MTURK.txt");
            is = new InputStreamReader(fis, "ISO-8859-1");
            bf = new BufferedReader(is);
            query = " ";

            while ((linea = bf.readLine()) != null) {
                  query = query + " " + linea;
            }
            
            fis.close();  
            
            
            //Se obtiene el máximo del sctf-idf-s predictor:
            cdb.un_sql = query;
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            if (cdb.resultado != null)
            {
                if (cdb.resultado.next())
                {
                    max_sctfidfs_p_MTURK = cdb.resultado.getDouble("max");
                }        
            }
            
            ///////////////////////////////////////////////////////////////
            //Se obtienen los maximos de los puntajes reales (TODO)
            ///////////////////////////////////////////////////////////////
            cdb.un_sql = "SELECT "
                    + "rp.ID_RELACION_PAG, rp.ID_PAGINA_FUENTE, rp.ID_PAGINA_DESTINO, "
                    + "rp.PJE_PREDICTOR_JACCARD AS \"PJE_PREDICTOR_JACCARD\", j.COEFICIENTE_J AS \"PJE_REAL_JACCARD\", "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_N AS  \"PJE_PREDICTOR_SCTF_IDF_N\", msc1.SCTFIDF_N AS \"PJE_REAL_SCTF_IDF_N\", "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_S AS \"PJE_PREDICTOR_SCTF_IDF_S\", msc2.SCTFIDF_S AS \"PJE_REAL_SCTF_IDF_S\" "
                    + "FROM relacion_paginas AS rp "
                    + "INNER JOIN pagina AS p1 "
                    + "ON rp.ID_PAGINA_FUENTE = p1.ID_PAGINA "
                    + "INNER JOIN pagina AS p2 "
                    + "ON rp.ID_PAGINA_DESTINO = p2.ID_PAGINA "
                    + "INNER JOIN MEDICION_JACCARD AS j "
                    + "ON rp.ID_PAGINA_DESTINO = j.ID_PAGINA "
                    + "INNER JOIN MEDICION_SCTFIDF_N AS msc1 "
                    + "ON rp.ID_PAGINA_DESTINO = msc1.ID_PAGINA "
                    + "INNER JOIN MEDICION_SCTFIDF_S AS msc2 "
                    + "ON rp.ID_PAGINA_DESTINO = msc2.ID_PAGINA";

            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            
            double puntaje_j = 0;
            double puntaje_sc_tfidfn = 0;
            double puntaje_sc_tfidfs = 0;
            
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    //Se obtiene el puntaje:
                    puntaje_j = cdb.resultado.getDouble("PJE_REAL_JACCARD");
                    if (max_jaccard_r_TODO <= puntaje_j){
                        max_jaccard_r_TODO = puntaje_j;
                    }
                    puntaje_sc_tfidfn = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_N");
                    if (max_sctfidfn_r_TODO <= puntaje_sc_tfidfn){
                        max_sctfidfn_r_TODO = puntaje_sc_tfidfn;
                    }
                    puntaje_sc_tfidfs = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_S");
                    if (max_sctfidfs_r_TODO <= puntaje_sc_tfidfs){
                        max_sctfidfs_r_TODO = puntaje_sc_tfidfs;
                    }

                }
            }
            
            ///////////////////////////////////////////////////////////////
            //Se obtienen los maximos de los puntajes reales (MTURK)
            ///////////////////////////////////////////////////////////////
            //SE OBTIENE LA CONSULTA:
            fis = new FileInputStream("C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\SQL\\ConsultaSQL.txt");
            is = new InputStreamReader(fis, "ISO-8859-1");
            bf = new BufferedReader(is);
            query = " ";

            while ((linea = bf.readLine()) != null) {
                  query = query + " " + linea;
            }
            
            fis.close();           
            cdb.un_sql = query;
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            
            puntaje_j = 0;
            puntaje_sc_tfidfn = 0;
            puntaje_sc_tfidfs = 0;
            
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    //Se obtiene el puntaje:
                    puntaje_j = cdb.resultado.getDouble("PJE_REAL_JACCARD");
                    if (max_jaccard_r_MTURK <= puntaje_j){
                        max_jaccard_r_MTURK = puntaje_j;
                    }
                    puntaje_sc_tfidfn = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_N");
                    if (max_sctfidfn_r_MTURK <= puntaje_sc_tfidfn){
                        max_sctfidfn_r_MTURK = puntaje_sc_tfidfn;
                    }
                    puntaje_sc_tfidfs = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_S");
                    if (max_sctfidfs_r_MTURK <= puntaje_sc_tfidfs){
                        max_sctfidfs_r_MTURK = puntaje_sc_tfidfs;
                    }

                }
            }
            
            
            /////////////////////////
            //DATOS SIN AGRUPAR
            /////////////////////////

            //Se obtienen los datos de la tabla "relacion_paginas" los registros
            //MTURK:
            
            //SE OBTIENE LA CONSULTA:
            fis = new FileInputStream("C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\SQL\\ConsultaSQL.txt");
            is = new InputStreamReader(fis, "ISO-8859-1");
            bf = new BufferedReader(is);
            query = " ";

            while ((linea = bf.readLine()) != null) {
                  query = query + " " + linea;
            }
            
            fis.close();           
            cdb.un_sql = query;
            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
           
            //DATOS EXCEL:
            int i = 1;

            //SE INICIA EL CICLO:
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    //Se obtiene el id:
                    id_relacion_pag = cdb.resultado.getInt("id_relacion_pag");

                    //Se van guardando los datos:
                    ID_RELACION_PAG = cdb.resultado.getInt("ID_RELACION_PAG");
                    ID_PAGINA_FUENTE = cdb.resultado.getInt("ID_PAGINA_FUENTE");
                    ID_PAGINA_DESTINO = cdb.resultado.getInt("ID_PAGINA_DESTINO");
                    URL_FUENTE = cdb.resultado.getString("URL_FUENTE");
                    URL_DESTINO = cdb.resultado.getString("URL_DESTINO");
                    ANCHOR_TEXT = cdb.resultado.getString("ANCHOR_TEXT");
                    TEXTO_ALREDEDOR = cdb.resultado.getString("TEXTO_ALREDEDOR");
                    HEADER = cdb.resultado.getString("HEADER");
                    TITLE = cdb.resultado.getString("TITLE");
                    //Se normalizan los puntajes:
                    PJE_PREDICTOR_JACCARD = cdb.resultado.getDouble("PJE_PREDICTOR_JACCARD")/max_jaccard_p_MTURK;
                    PJE_REAL_JACCARD = cdb.resultado.getDouble("PJE_REAL_JACCARD")/max_jaccard_r_MTURK;
                    PJE_PREDICTOR_SCTF_IDF_N = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_N")/max_sctfidfn_p_MTURK;
                    PJE_REAL_SCTF_IDF_N = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_N")/max_sctfidfn_r_MTURK;
                    PJE_PREDICTOR_SCTF_IDF_S = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_S")/max_sctfidfs_p_MTURK;
                    PJE_REAL_SCTF_IDF_S = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_S")/max_sctfidfs_r_MTURK;
                    
                    //Se escriben las filas en los datasets:
                    //hoja Jaccard
                    fila = Jaccard_hojaMTURK_SA.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto); 
                    
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_JACCARD);
                    
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_JACCARD);
                    
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
                    //hoja SCTFIDF-N:
                    fila = SCTFIDFN_hojaMTURK_SA.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_N);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
                    
                    //hoja SCTFIDF-S:
                    fila = SCTFIDFS_hojaMTURK_SA.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_S);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_S);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
                    i++;
    
                    /*
                    writercsv1.write (String.valueOf(ID_RELACION_PAG));
                    writercsv1.write (String.valueOf(ID_PAGINA_FUENTE));
                    writercsv1.write (String.valueOf(ID_PAGINA_DESTINO));
                    writercsv1.write (URL_FUENTE);
                    writercsv1.write (URL_DESTINO);                  
                    writercsv1.write (ANCHOR_TEXT);
                    writercsv1.write (TEXTO_ALREDEDOR);  
                    writercsv1.write (HEADER);
                    writercsv1.write (TITLE);
                    writercsv1.write (String.valueOf(PJE_PREDICTOR_JACCARD));
                    writercsv1.write (String.valueOf(PJE_REAL_JACCARD));
                    writercsv1.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_N));
                    writercsv1.write (String.valueOf(PJE_REAL_SCTF_IDF_N));
                    writercsv1.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_S));
                    writercsv1.write (String.valueOf(PJE_REAL_SCTF_IDF_S));
                    writercsv1.endRecord();
                    */
                }
                
                //Se escribe Excel 1:
                String pathArchivo1 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetMturk_SA.xls";
                FileOutputStream archivo1 = new FileOutputStream(pathArchivo1);
                DatasetMTURK_SA.write(archivo1);
                archivo1.close();
                
            }


            //Se obtienen los datos de la tabla "relacion_paginas" para TODOS los
            //registros:
            cdb.un_sql = "SELECT "
                    + "rp.ID_RELACION_PAG, rp.ID_PAGINA_FUENTE, rp.ID_PAGINA_DESTINO, "
                    + "p1.URL AS \"URL_FUENTE\", p2.URL AS \"URL_DESTINO\", "
                    + "rp.ANCHOR_TEXT, rp.TEXTO_ALREDEDOR, rp.HEADER, rp.TITLE, "
                    + "rp.PJE_PREDICTOR_JACCARD AS \"PJE_PREDICTOR_JACCARD\", j.COEFICIENTE_J AS \"PJE_REAL_JACCARD\", "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_N AS  \"PJE_PREDICTOR_SCTF_IDF_N\", msc1.SCTFIDF_N AS \"PJE_REAL_SCTF_IDF_N\", "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_S AS \"PJE_PREDICTOR_SCTF_IDF_S\", msc2.SCTFIDF_S AS \"PJE_REAL_SCTF_IDF_S\" "
                    + "FROM relacion_paginas AS rp "
                    + "INNER JOIN pagina AS p1 "
                    + "ON rp.ID_PAGINA_FUENTE = p1.ID_PAGINA "
                    + "INNER JOIN pagina AS p2 "
                    + "ON rp.ID_PAGINA_DESTINO = p2.ID_PAGINA "
                    + "INNER JOIN MEDICION_JACCARD AS j "
                    + "ON rp.ID_PAGINA_DESTINO = j.ID_PAGINA "
                    + "INNER JOIN MEDICION_SCTFIDF_N AS msc1 "
                    + "ON rp.ID_PAGINA_DESTINO = msc1.ID_PAGINA "
                    + "INNER JOIN MEDICION_SCTFIDF_S AS msc2 "
                    + "ON rp.ID_PAGINA_DESTINO = msc2.ID_PAGINA";

            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            
            i = 1;
            
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    //Se obtiene el id:
                    id_relacion_pag = cdb.resultado.getInt("id_relacion_pag");

                    //Se van guardando los datos:
                    ID_RELACION_PAG = cdb.resultado.getInt("ID_RELACION_PAG");
                    ID_PAGINA_FUENTE = cdb.resultado.getInt("ID_PAGINA_FUENTE");
                    ID_PAGINA_DESTINO = cdb.resultado.getInt("ID_PAGINA_DESTINO");
                    URL_FUENTE = cdb.resultado.getString("URL_FUENTE");
                    URL_DESTINO = cdb.resultado.getString("URL_DESTINO");
                    ANCHOR_TEXT = cdb.resultado.getString("ANCHOR_TEXT");
                    TEXTO_ALREDEDOR = cdb.resultado.getString("TEXTO_ALREDEDOR");
                    HEADER = cdb.resultado.getString("HEADER");
                    TITLE = cdb.resultado.getString("TITLE");
                    //Se normalizan los puntajes:
                    PJE_PREDICTOR_JACCARD = cdb.resultado.getDouble("PJE_PREDICTOR_JACCARD")/max_jaccard_p_TODO;
                    PJE_REAL_JACCARD = cdb.resultado.getDouble("PJE_REAL_JACCARD")/max_jaccard_r_TODO;
                    PJE_PREDICTOR_SCTF_IDF_N = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_N")/max_sctfidfn_p_TODO;
                    PJE_REAL_SCTF_IDF_N = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_N")/max_sctfidfn_r_TODO;
                    PJE_PREDICTOR_SCTF_IDF_S = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_S")/max_sctfidfs_p_TODO;
                    PJE_REAL_SCTF_IDF_S = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_S")/max_sctfidfs_r_TODO;
                    
                    
                    
                    //Se escriben las filas en los datasets:
                    //hoja Jaccard
                    fila = Jaccard_hojaTODO_SA.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_JACCARD);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_JACCARD);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);

                    
                    //hoja SCTFIDF-N:
                    fila = SCTFIDFN_hojaTODO_SA.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_N);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
           
                    //hoja SCTFIDF-S:
                    fila = SCTFIDFS_hojaTODO_SA.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_S);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_S);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
                    i++;
                    
                    

                    
                    //Se escriben las filas en los datasets:
                    /*
                    writercsv2.write (String.valueOf(ID_RELACION_PAG));
                    writercsv2.write (String.valueOf(ID_PAGINA_FUENTE));
                    writercsv2.write (String.valueOf(ID_PAGINA_DESTINO));
                    writercsv2.write (URL_FUENTE);
                    writercsv2.write (URL_DESTINO);                  
                    writercsv2.write (ANCHOR_TEXT);
                    writercsv2.write (TEXTO_ALREDEDOR);  
                    writercsv2.write (HEADER);
                    writercsv2.write (TITLE);
                    writercsv2.write (String.valueOf(PJE_PREDICTOR_JACCARD));
                    writercsv2.write (String.valueOf(PJE_REAL_JACCARD));
                    writercsv2.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_N));
                    writercsv2.write (String.valueOf(PJE_REAL_SCTF_IDF_N));
                    writercsv2.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_S));
                    writercsv2.write (String.valueOf(PJE_REAL_SCTF_IDF_S));
                    writercsv2.endRecord();
                     *
                     */

                }
                
                //Se escribe Excel 2:
                String pathArchivo2 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetTodo_SA.xls";
                FileOutputStream archivo2 = new FileOutputStream(pathArchivo2);
                DatasetTODO_SA.write(archivo2);
                archivo2.close();
                
            } 

            /////////////////////////
            //DATOS AGRUPADO
            /////////////////////////

            //Se obtienen los datos de la tabla "relacion_paginas" los registros
            //MTURK:

            fis = new FileInputStream("C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\SQL\\ConsultaSQL2.txt");
            is = new InputStreamReader(fis, "ISO-8859-1");
             bf = new BufferedReader(is);
            query = " ";

            while ((linea = bf.readLine()) != null) {
                  query = query + " " + linea;
            }
            
            System.out.println("CONSULTA: "+ query);
            
            fis.close();
            
            i = 1;
            
            cdb.un_sql = query;

            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    //Se obtiene el id:
                    id_relacion_pag = cdb.resultado.getInt("id_relacion_pag");

                    //Se van guardando los datos:
                    ID_RELACION_PAG = cdb.resultado.getInt("ID_RELACION_PAG");
                    ID_PAGINA_FUENTE = cdb.resultado.getInt("ID_PAGINA_FUENTE");
                    ID_PAGINA_DESTINO = cdb.resultado.getInt("ID_PAGINA_DESTINO");
                    URL_FUENTE = cdb.resultado.getString("URL_FUENTE");
                    URL_DESTINO = cdb.resultado.getString("URL_DESTINO");
                    ANCHOR_TEXT = cdb.resultado.getString("ANCHOR_TEXT");
                    TEXTO_ALREDEDOR = cdb.resultado.getString("TEXTO_ALREDEDOR");
                    HEADER = cdb.resultado.getString("HEADER");
                    TITLE = cdb.resultado.getString("TITLE");
                    //Se normalizan los puntajes:
                    PJE_PREDICTOR_JACCARD = cdb.resultado.getDouble("PJE_PREDICTOR_JACCARD")/max_jaccard_p_MTURK;
                    PJE_REAL_JACCARD = cdb.resultado.getDouble("PJE_REAL_JACCARD")/max_jaccard_r_MTURK;
                    PJE_PREDICTOR_SCTF_IDF_N = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_N")/max_sctfidfn_p_MTURK;
                    PJE_REAL_SCTF_IDF_N = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_N")/max_sctfidfn_r_MTURK;
                    PJE_PREDICTOR_SCTF_IDF_S = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_S")/max_sctfidfs_p_MTURK;
                    PJE_REAL_SCTF_IDF_S = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_S")/max_sctfidfs_r_MTURK;
                    
                    
                    
                    //Se escriben las filas en los datasets:
                    //hoja Jaccard
                    fila = Jaccard_hojaMTURK_A.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_JACCARD);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_JACCARD);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);

                    
                    //hoja SCTFIDF-N:
                    fila = SCTFIDFN_hojaMTURK_A.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_N);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);

                    
                    //hoja SCTFIDF-S:
                    fila = SCTFIDFS_hojaMTURK_A.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_S);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_S);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
                    i++;
                    

                    
                    //Se escriben las filas en los datasets:
                    /*
                    writercsv3.write (String.valueOf(ID_RELACION_PAG));
                    writercsv3.write (String.valueOf(ID_PAGINA_FUENTE));
                    writercsv3.write (String.valueOf(ID_PAGINA_DESTINO));
                    writercsv3.write (URL_FUENTE);
                    writercsv3.write (URL_DESTINO);                  
                    writercsv3.write (ANCHOR_TEXT);
                    writercsv3.write (TEXTO_ALREDEDOR);  
                    writercsv3.write (HEADER);
                    writercsv3.write (TITLE);
                    writercsv3.write (String.valueOf(PJE_PREDICTOR_JACCARD));
                    writercsv3.write (String.valueOf(PJE_REAL_JACCARD));
                    writercsv3.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_N));
                    writercsv3.write (String.valueOf(PJE_REAL_SCTF_IDF_N));
                    writercsv3.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_S));
                    writercsv3.write (String.valueOf(PJE_REAL_SCTF_IDF_S));
                    writercsv3.endRecord();
                    */

                }
                
                //Se escribe Excel 3:
                String pathArchivo3 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetMturk_A.xls";
                FileOutputStream archivo3 = new FileOutputStream(pathArchivo3);
                DatasetMTURK_A.write(archivo3);
                archivo3.close();
                
            }


            //Se obtienen los datos de la tabla "relacion_paginas" para TODOS los
            //registros:
            cdb.un_sql = "SELECT "
                    + "rp.ID_RELACION_PAG, rp.ID_PAGINA_FUENTE, rp.ID_PAGINA_DESTINO, "
                    + "p1.URL AS \"URL_FUENTE\", p2.URL AS \"URL_DESTINO\", "
                    + "rp.ANCHOR_TEXT, rp.TEXTO_ALREDEDOR, rp.HEADER, rp.TITLE, "
                    + "rp.PJE_PREDICTOR_JACCARD AS \"PJE_PREDICTOR_JACCARD\", j.COEFICIENTE_J AS \"PJE_REAL_JACCARD\", "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_N AS \"PJE_PREDICTOR_SCTF_IDF_N\", msc1.SCTFIDF_N AS \"PJE_REAL_SCTF_IDF_N\", "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_S AS \"PJE_PREDICTOR_SCTF_IDF_S\", msc2.SCTFIDF_S AS \"PJE_REAL_SCTF_IDF_S\" "
                    + "FROM relacion_paginas AS rp "
                    + "INNER JOIN pagina AS p1 "
                    + "ON rp.ID_PAGINA_FUENTE = p1.ID_PAGINA "
                    + "INNER JOIN pagina AS p2 "
                    + "ON rp.ID_PAGINA_DESTINO = p2.ID_PAGINA "
                    + "INNER JOIN MEDICION_JACCARD AS j "
                    + "ON rp.ID_PAGINA_DESTINO = j.ID_PAGINA "
                    + "INNER JOIN MEDICION_SCTFIDF_N AS msc1 "
                    + "ON rp.ID_PAGINA_DESTINO = msc1.ID_PAGINA "
                    + "INNER JOIN MEDICION_SCTFIDF_S AS msc2 "
                    + "ON rp.ID_PAGINA_DESTINO = msc2.ID_PAGINA "
                    + "GROUP BY rp.ID_PAGINA_DESTINO "
                    + "ORDER BY rp.PJE_PREDICTOR_JACCARD AND "
                    + "rp.PJE_PREDICTOR_SCTF_IDF_N AND rp.PJE_PREDICTOR_SCTF_IDF_S DESC;";

            cdb.resultado = cdb.un_st.executeQuery(cdb.un_sql);
            
            i = 1;
            
            if (cdb.resultado != null)
            {
                while (cdb.resultado.next())
                {
                    //Se obtiene el id:
                    id_relacion_pag = cdb.resultado.getInt("id_relacion_pag");

                    //Se van guardando los datos:
                    ID_RELACION_PAG = cdb.resultado.getInt("ID_RELACION_PAG");
                    ID_PAGINA_FUENTE = cdb.resultado.getInt("ID_PAGINA_FUENTE");
                    ID_PAGINA_DESTINO = cdb.resultado.getInt("ID_PAGINA_DESTINO");
                    URL_FUENTE = cdb.resultado.getString("URL_FUENTE");
                    URL_DESTINO = cdb.resultado.getString("URL_DESTINO");
                    ANCHOR_TEXT = cdb.resultado.getString("ANCHOR_TEXT");
                    TEXTO_ALREDEDOR = cdb.resultado.getString("TEXTO_ALREDEDOR");
                    HEADER = cdb.resultado.getString("HEADER");
                    TITLE = cdb.resultado.getString("TITLE");
                    //Se normalizan los puntajes:
                    PJE_PREDICTOR_JACCARD = cdb.resultado.getDouble("PJE_PREDICTOR_JACCARD")/max_jaccard_p_TODO;
                    PJE_REAL_JACCARD = cdb.resultado.getDouble("PJE_REAL_JACCARD")/max_jaccard_r_TODO;
                    PJE_PREDICTOR_SCTF_IDF_N = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_N")/max_sctfidfn_p_TODO;
                    PJE_REAL_SCTF_IDF_N = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_N")/max_sctfidfn_r_TODO;
                    PJE_PREDICTOR_SCTF_IDF_S = cdb.resultado.getDouble("PJE_PREDICTOR_SCTF_IDF_S")/max_sctfidfs_p_TODO;
                    PJE_REAL_SCTF_IDF_S = cdb.resultado.getDouble("PJE_REAL_SCTF_IDF_S")/max_sctfidfs_r_TODO;
                    
                    
                    
                    //Se escriben las filas en los datasets:
                    //hoja Jaccard
                    fila = Jaccard_hojaTODO_A.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_JACCARD);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_JACCARD);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);

                    
                    //hoja SCTFIDF-N:
                    fila = SCTFIDFN_hojaTODO_A.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_N);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);

                    
                    //hoja SCTFIDF-S:
                    fila = SCTFIDFS_hojaTODO_A.createRow(i);
                    celda = fila.createCell(0);
                    celda.setCellValue(ID_RELACION_PAG);
                    celda = fila.createCell(1);
                    celda.setCellValue(ID_PAGINA_FUENTE);
                    celda = fila.createCell(2);
                    celda.setCellValue(ID_PAGINA_DESTINO);
                    celda = fila.createCell(3);
                    texto = new HSSFRichTextString(URL_FUENTE);
                    celda.setCellValue(texto);          
                    celda = fila.createCell(4);
                    texto = new HSSFRichTextString(URL_DESTINO);
                    celda.setCellValue(texto);
                    celda = fila.createCell(5);
                    celda.setCellValue(PJE_PREDICTOR_SCTF_IDF_S);
                    celda = fila.createCell(6);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_S);
                    celda = fila.createCell(7);
                    celda.setCellValue(PJE_REAL_SCTF_IDF_N);
                    
                    i++;
                    

                    
                    
                    //Se escriben las filas en los datasets:
                    /*
                    writercsv4.write (String.valueOf(ID_RELACION_PAG));
                    writercsv4.write (String.valueOf(ID_PAGINA_FUENTE));
                    writercsv4.write (String.valueOf(ID_PAGINA_DESTINO));
                    writercsv4.write (URL_FUENTE);
                    writercsv4.write (URL_DESTINO);                  
                    writercsv4.write (ANCHOR_TEXT);
                    writercsv4.write (TEXTO_ALREDEDOR);  
                    writercsv4.write (HEADER);
                    writercsv4.write (TITLE);
                    writercsv4.write (String.valueOf(PJE_PREDICTOR_JACCARD));
                    writercsv4.write (String.valueOf(PJE_REAL_JACCARD));
                    writercsv4.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_N));
                    writercsv4.write (String.valueOf(PJE_REAL_SCTF_IDF_N));
                    writercsv4.write (String.valueOf(PJE_PREDICTOR_SCTF_IDF_S));
                    writercsv4.write (String.valueOf(PJE_REAL_SCTF_IDF_S));
                    writercsv4.endRecord();
                     * 
                     */

                }
                
                //Se guarda el Excel 4:
                String pathArchivo4 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetTodo_A.xls";
                FileOutputStream archivo4 = new FileOutputStream(pathArchivo4);
                DatasetTODO_A.write(archivo4);
                archivo4.close(); 
                
            }
        
            
            // Se salva el libro.
                
                //String pathArchivo1 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetMturk_SA.xls";
                //String pathArchivo2 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetTodo_SA.xls";
                //String pathArchivo3 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetMturk_A.xls";
                //String pathArchivo4 = "C:\\Documents and Settings\\Mauricio\\Mis documentos\\NetBeansProjects\\Filtro\\DatasetTodo_A.xls";

                //FileOutputStream archivo1 = new FileOutputStream(pathArchivo1);
                //FileOutputStream archivo2 = new FileOutputStream(pathArchivo2);
                //FileOutputStream archivo3 = new FileOutputStream(pathArchivo3);
                //FileOutputStream archivo4 = new FileOutputStream(pathArchivo4);
                
                //DatasetMTURK_SA.write(archivo1);
                //DatasetTODO_SA.write(archivo2);
                //DatasetMTURK_A.write(archivo3);
                //DatasetTODO_A.write(archivo4);
                        
                //archivo1.close();
                //archivo2.close();
                //archivo3.close(); 
                //archivo4.close(); 
    

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            /*
            writercsv1.close();
            writercsv2.close();
            writercsv3.close();
            writercsv4.close();   
             * 
             */

        }
        


            
    }

}//FIN ClasificadorBD